<?php

namespace catchAdmin\business\model;

use catchAdmin\business\model\search\ShippingSearch;
use catcher\base\CatchModel;
use think\facade\Db;
/**
 *
 * @property int $id
 * @property string $job_number
 * @property string $business_type
 * @property date $entrust_date
 * @property int $tenant_id
 * @property int $creator_id
 * @property int $created_at
 * @property int $updated_at
 * @property int $deleted_at
 * @property string $business_status
 * @property string $order_status
 * @property string $sale
 * @property string $sales_company
 * @property string $entrust_company
 * @property string $management_company
 * @property string $sales_department
 * @property string $customer_service
 * @property string $project_type
 * @property string $contacts
 * @property string $telephone
 * @property string $loading_mode
 * @property string $inside_type
 * @property string $settlement_company
 * @property string $consignor
 * @property string $consignee
 * @property string $notifier
 * @property string $departure_harbor
 * @property string $objective_harbor
 * @property string $destination
 * @property string $route
 * @property string $flight
 * @property string $main_doc_no
 * @property string $sub_order_No
 * @property date $sail_date
 * @property date $arrival_date
 * @property date $port_opening_date
 * @property date $cut_off_date
 * @property int $number
 * @property string $packing
 * @property float $gross_weight
 * @property float $volume
 * @property float $charging_weight
 * @property string $goods_size
 * @property string $c_product_name
 * @property string $e_product_name
 * @property string $goods_attribute
 * @property string $shipping_mark
 * @property date $operation_date
 * @property string $booking_agent
 * @property string $airline_company
 * @property string $warehouse
 * @property string $warehousing_number
 * @property date $warehousing_date
 * @property string $warehouse_address
 * @property string $warehouse_contact
 * @property string $warehouse_telephone
 * @property string $overseas_agent
 * @property string $agent_address
 * @property string $freight_clause
 * @property string $miscellaneous_clause
 * @property string $lading_bill_ask
 * @property string $lading_bill_info
 * @property string $customer_number
 * @property string $remarks
 * @property string $MBL_NO
 * @property string $HBL_NO
 * @property string $port_area
 * @property string $box_type_volume
 * @property string $transfer
 */
class Shipping extends CatchModel
{
    use ShippingSearch;

    public $field = [
        // ID
        'id',
        // 工作号
        'job_number',
        // 业务类型:1.'空运进口',2'空运出口',3.'海运进口',4.'海运出口'
        'business_type',
        // 委托日期
        'entrust_date',
        // 商户
        'tenant_id',
        // 创建人id
        'creator_id',
        // 创建时间
        'created_at',
        // 更新时间
        'updated_at',
        // 删除时间
        'deleted_at',
        // 业务状态:1:NEW
        'business_status',
        // 订单状态:1:NEW
        'order_status',
        // 销售
        'sale',
        // 销售公司
        'sales_company',
        // 委托单位
        'entrust_company',
        // 经营单位
        'management_company',
        // 销售部门
        'sales_department',
        // 客服
        'customer_service',
        // 项目类型
        'project_type',
        // 联系人
        'contacts',
        // 联系电话
        'telephone',
        // 装载方式
        'loading_mode',
        // 内部类型:1空出清关
        'inside_type',
        // 结算单位
        'settlement_company',
        // 发货人
        'consignor',
        // 收货人
        'consignee',
        // 通知人
        'notifier',
        // 起运港
        'departure_harbor',
        // 目的港
        'objective_harbor',
        // 最终目的地
        'destination',
        // 航线
        'route',
        // 航班
        'flight',
        // 主单号
        'main_doc_no',
        // 分单号
        'sub_order_No',
        // 开航日期
        'sail_date',
        // 到港日期
        'arrival_date',
        // 开港日期
        'port_opening_date',
        // 截关日期
        'cut_off_date',
        // 件数
        'number',
        // 包装
        'packing',
        // 毛重
        'gross_weight',
        // 体积
        'volume',
        // 计费重量
        'charging_weight',
        // 货物尺寸
        'goods_size',
        // 中文品名
        'c_product_name',
        // 英文品名
        'e_product_name',
        // 货物属性
        'goods_attribute',
        // 唛头
        'shipping_mark',
        // 操作日期
        'operation_date',
        // 订舱代理
        'booking_agent',
        // 航空公司
        'airline_company',
        // 仓库
        'warehouse',
        // 进仓编号
        'warehousing_number',
        // 入库日期
        'warehousing_date',
        // 仓库地址
        'warehouse_address',
        // 仓库联系人
        'warehouse_contact',
        // 仓库电话
        'warehouse_telephone',
        // 海外代理
        'overseas_agent',
        // 代理地址
        'agent_address',
        // 运费条款
        'freight_clause',
        // 杂费条款
        'miscellaneous_clause',
        // 提单要求
        'lading_bill_ask',
        // 提单信息
        'lading_bill_info',
        // 客户参考号
        'customer_number',
        // 备注
        'remarks',
        //
        'MBL_NO',
        //
        'HBL_NO',
        // 港区
        'port_area',
        // 箱型箱量
        'box_type_volume',
        // 中转港代码
        'transfer',
        'lading_bill_num',
        'entrust_company_follow',
        'management_company_follow',
        'settlement_company_follow'
    ];
    
    public $name = 'db_entrust_order';

   /**
   * 列表
   * @throws \think\db\exception\DbException
   * @return \think\Paginator
   */
    public function getList($tenant_id = 0)
    {
        $where=[];
        if($tenant_id){
            $where[] = ['tenant_id','=',$tenant_id];
        }
         return $this->catchSearch()
                    ->order('id','desc')
                    ->where($where)
                    ->whereIn('business_type','SE,SI')
                    ->withoutField('tenant_id,updated_at,deleted_at,created_at')
                    ->paginate()
                    ->each(function (&$item){
                        $item['username'] = Db::table('users')->where('id',$item['creator_id'])->value('username');
                        $item['entrust_company_name'] = Db::table('db_provider')
                            ->where('id',$item['entrust_company'])
                            ->value('account_name');
                        $item['management_company_name'] = Db::table('db_provider')
                            ->where('id',$item['management_company'])
                            ->value('account_name');
                        $item['transport'] = Db::table('db_transport')
                            ->alias('a')
                            ->join('db_provider b','a.transport_company=b.id','left')
                            ->whereIn('a.job_number',$item['job_number'])
                            ->where('a.deleted_at',0)
                            ->field('a.*,b.account_name as transport_company_name')
                            //->eachWithoutField('tenant_id,creator_id,updated_at,deleted_at,created_at')
                            ->select();
//                        foreach ($item['transport'] as $k=>$v){
//                            $item['transport'][$k]['transport_company_name']=Db::table('db_provider')
//                                ->where('id',$v['transport_company'])
//                                ->value('account_name');
//                        }
                        //费用
                        $item['expenses'] = Db::table('db_expenses')
                            ->whereIn('job_number',$item['job_number'])
                            ->where('deleted_at',0)
                            ->eachWithoutField('tenant_id,creator_id,updated_at,deleted_at,created_at')
                            ->select();
                        $item['declaration'] = Db::table('db_declare_document')
                            ->whereIn('job_number',$item['job_number'])
                            ->where('deleted_at',0)
                            ->eachWithoutField('tenant_id,creator_id,updated_at,deleted_at,created_at')
                            ->select();

                        //其他信息表
//                        $item['otherinfo']=Db::table('db_otherinfo')
//                            ->eachWithoutField('tenant_id,creator_id,updated_at,deleted_at,created_at')
//                            ->select();
                    });
    }
}